Ana içeriğe geç

BroadcastChannel

Deno Deploy'de kod, istemciye en yakın veri merkezinde istekleri hizmet vererek gecikmeyi azaltmak için dünya çapında farklı veri merkezlerinde çalıştırılır. Tarayıcıda, BroadcastChannel API'si aynı kökene sahip farklı sekmelerin mesaj alışverişinde bulunmasını sağlar. Deno Deploy'de, BroadcastChannel API'si çeşitli örnekler arasında bir iletişim mekanizması sağlar; dünya çapındaki çeşitli Deploy örneklerini bağlayan basit bir mesaj aktarım sistemidir.

Yapıcı

BroadcastChannel() yapıcı fonksiyonu yeni bir BroadcastChannel örneği oluşturur ve sağlanan kanala bağlanır (veya onu oluşturur).

let channel = new BroadcastChannel(channelName);

Parametreler

adtüraçıklama
channelNamestringAltyapı yayın kanalı bağlantısı için isim.

Yapıcı fonksiyonun dönüş türü bir BroadcastChannel örneğidir.

Özellikler

adtüraçıklama
namestringAltyapı yayın kanalının adı.
onmessagefunction (veya null)Kanal yeni bir mesaj aldığında yürütülen fonksiyon (MessageEvent).
onmessageerrorfunction (veya null)Gelen mesajın bir JavaScript veri yapısına deseralize edilemediğinde yürütülen fonksiyon.

Metotlar

adaçıklama
close()Altyapı kanalına olan bağlantıyı kapatır. Kapatıldıktan sonra kanala mesaj göndermek mümkün değildir.
postMessage(message)Altyapı kanalına bir mesaj gönderir. Mesaj bir dize, nesne literali, bir sayı veya her türlü Object olabilir.
ipucu

BroadcastChannel, EventTarget'ı genişleterek BroadcastChannel örneği üzerinde addEventListener ve removeEventListener gibi EventTarget metotlarını kullanmanıza olanak tanır.

Örnek: Durum bilgilerini örnekler arasında güncelleme

BroadcastChannel tarafından sağlanan bir mesaj aktarım sisteminin bir kullanım durumu, ağ boyunca farklı veri merkezlerinde çalışan izolasyonlar arasında veri olan bellekteki bir önbelleği güncellemektir. Aşağıdaki örnekte, BroadcastChannel kullanarak sunucunun tüm çalışan örnekleri arasında durumu senkronize edebilmek için basit bir sunucu nasıl yapılandırabileceğinizi gösteriyoruz.

import { Hono } from "https://deno.land/x/hono/mod.ts";

// mesajların bellek içi önbelleği
const messages = [];

// Tüm izolasyonlar tarafından kullanılan bir BroadcastChannel
const channel = new BroadcastChannel("all_messages");

// Diğer örneklerden yeni bir mesaj geldiğinde, ekleyin
channel.onmessage = (event: MessageEvent) => {
messages.push(event.data);
};

// Mesaj eklemek ve almak için bir sunucu oluşturun
const app = new Hono();

// Listeye bir mesaj ekleyin
app.get("/send", (c) => {
// Yeni mesajlar "message" sorgu parametresi eklenerek eklenebilir
const message = c.req.query("message");
if (message) {
messages.push(message);
channel.postMessage(message);
}
return c.redirect("/");
});

// Mesajların listesini alın
app.get("/", (c) => {
// Geçerli mesajlar listesini döndürün
return c.json(messages);
});

Deno.serve(app.fetch);

Bu örneği Deno Deploy üzerinde bu oyun alanı kullanarak kendiniz test edebilirsiniz.